home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
biz
/
haage
/
WarpUP_V31.lha
/
WarpUP-WarpOS
/
include
/
powerpc
/
powerpc.i
< prev
next >
Wrap
Text File
|
1998-03-06
|
22KB
|
756 lines
IFND POWERPC_POWERPC_I
POWERPC_POWERPC_I SET 1
**
** $VER: PowerPC.i 14.0 (5.3.98)
**
** Hardware and communication related structures and macros
** for the powerpc.library
**
IFND POWERPC_PPCMACROS_I
include powerpc/ppcmacros.i
ENDC
IFND EXEC_TYPES_I
include exec/types.i
ENDC
IFND UTILITY_TAGITEM_I
include utility/tagitem.i
ENDC
IFND POWERPCLIB_V7 ;only for V8+
**** tagitem values for GetHALInfo (V14+)
ENUM TAG_USER+$103000
EITEM HINFO_ALEXC_HIGH ;High word of emulated
;alignment exceptions
EITEM HINFO_ALEXC_LOW ;Low word of ...
**** tagitem values for SetScheduling (V14+)
ENUM TAG_USER+$104000
EITEM SCHED_REACTION ;reaction of low activity tasks
**** tagitem values for GetInfo
ENUM TAG_USER+$102000
EITEM PPCINFO_CPU ;CPU type (see below)
EITEM PPCINFO_PVR ;PVR value
EITEM PPCINFO_ICACHE ;Instruction cache state
EITEM PPCINFO_DCACHE ;Data cache state
EITEM PPCINFO_PAGETABLE ;Page table location
EITEM PPCINFO_TABLESIZE ;Page table size
EITEM PPCINFO_BUSCLOCK ;PPC bus clock
EITEM PPCINFO_CPUCLOCK ;PPC CPU clock
EITEM PPCINFO_CPULOAD ;Total CPU usage *100 [%]
EITEM PPCINFO_SYSTEMLOAD ;Total system load *100 [%]
**** PPCINFO_ICACHE / PPCINFO_DCACHE
BITDEF CACHE,ON_UNLOCKED,0 ;cache is on and unlocked
BITDEF CACHE,ON_LOCKED,1 ;cache is on and locked
BITDEF CACHE,OFF_UNLOCKED,2 ;cache is off and unlocked
BITDEF CACHE,OFF_LOCKED,3 ;cache is off and locked
**** Cache flags (required by SetCache)
CACHE_DCACHEOFF = 1
CACHE_DCACHEON = 2
CACHE_DCACHELOCK = 3
CACHE_DCACHEUNLOCK = 4
CACHE_DCACHEFLUSH = 5
CACHE_ICACHEOFF = 6
CACHE_ICACHEON = 7
CACHE_ICACHELOCK = 8
CACHE_ICACHEUNLOCK = 9
CACHE_ICACHEINV = 10
**** Hardware flags (required by SetHardware)
HW_TRACEON = 1 ;enable singlestep mode
HW_TRACEOFF = 2 ;disable singlestep mode
HW_BRANCHTRACEON = 3 ;enable branch trace mode
HW_BRANCHTRACEOFF = 4 ;disable branch trace mode
HW_FPEXCON = 5 ;enable FP exceptions
HW_FPEXCOFF = 6 ;disable FP exceptions
HW_SETIBREAK = 7 ;set instruction breakpoint
HW_CLEARIBREAK = 8 ;clear instruction breakpoint
HW_SETDBREAK = 9 ;set data breakpoint (604[E] only)
HW_CLEARDBREAK = 10 ;clear data breakpoint (604[E] only)
**** return values of SetHardware
HW_AVAILABLE = -1 ;feature available
HW_NOTAVAILABLE = 0 ;feature not available
**** return values of GetPPCState
BITDEF PPCSTATE,POWERSAVE,0 ;PPC is in power save mode
BITDEF PPCSTATE,APPACTIVE,1 ;PPC application tasks are active
BITDEF PPCSTATE,APPRUNNING,2 ;PPC application task is running
**** FP flags (required by ModifyFPExc)
BITDEF FP,EN_OVERFLOW,0 ;enable overflow exception
BITDEF FP,EN_UNDERFLOW,1 ;enable underflow exception
BITDEF FP,EN_ZERODIVIDE,2 ;enable zerodivide exception
BITDEF FP,EN_INEXACT,3 ;enable inexact op. exception
BITDEF FP,EN_INVALID,4 ;enable invalid op. exception
BITDEF FP,DIS_OVERFLOW,5 ;disable overflow exception
BITDEF FP,DIS_UNDERFLOW,6 ;disable underflow exception
BITDEF FP,DIS_ZERODIVIDE,7 ;disable zerodivide exception
BITDEF FP,DIS_INEXACT,8 ;disable inexact op. exception
BITDEF FP,DIS_INVALID,9 ;disable invalid op. exception
FPF_ENABLEALL = $0000001f ;enable all FP exceptions
FPF_DISABLEALL = $000003e0 ;disable all FP exceptions
**** tags passed to SetExcHandler (exception handler attributes)
ENUM TAG_USER+$101000
EITEM EXCATTR_CODE ;-> exception code (required)
EITEM EXCATTR_DATA ;exception data
EITEM EXCATTR_TASK ;task if task dependant exc.
;0 for current task
EITEM EXCATTR_EXCID ;exception ID
EITEM EXCATTR_FLAGS ;see below
EITEM EXCATTR_NAME ;identification name
EITEM EXCATTR_PRI ;handler priority
**** EXCATTR_FLAGS (either EXC_GLOBAL or EXC_LOCAL, resp.
* EXC_SMALLCONTEXT or EXC_LARGECONTEXT must be
* specified)
BITDEF EXC,GLOBAL,0 ;global handler
BITDEF EXC,LOCAL,1 ;task dependant handler
BITDEF EXC,SMALLCONTEXT,2 ;small context structure
BITDEF EXC,LARGECONTEXT,3 ;large context structure
BITDEF EXC,ACTIVE,4 ;private
**** EXCATTR_EXCID (Exception ID)
BITDEF EXC,MCHECK,2 ;machine check exception
BITDEF EXC,DACCESS,3 ;data access exception
BITDEF EXC,IACCESS,4 ;instruction access exception
BITDEF EXC,ALIGN,6 ;alignment exception
BITDEF EXC,PROGRAM,7 ;program exception
BITDEF EXC,FPUN,8 ;FP unavailable exception
BITDEF EXC,TRACE,13 ;trace exception
BITDEF EXC,PERFMON,15 ;performance monitor exception
BITDEF EXC,IABR,19 ;IA breakpoint exception
**** Large exception context structure (if EXCATTR_LARGECONTEXT was set)
STRUCTURE EXCCONTEXT,0
ULONG EC_EXCID ;exception ID (see above)
ULONG EC_SRR0 ;process' program counter
ULONG EC_SRR1 ;process' context
ULONG EC_DAR ;DAR register
ULONG EC_DSISR ;DSISR register
ULONG EC_CR ;condition register
ULONG EC_CTR ;count register
ULONG EC_LR ;link register
ULONG EC_XER ;integer exception register
ULONG EC_FPSCR ;FP status register
STRUCT EC_GPR,32*4 ;r0 - r31
STRUCT EC_FPR,32*8 ;f0 - f31
LABEL EC_SIZE ;don't depend on this size
**** Symbolic offsets into the register arrays
__r0 = 0*4
__r1 = 1*4
__r2 = 2*4
__r3 = 3*4
__r4 = 4*4
__r5 = 5*4
__r6 = 6*4
__r7 = 7*4
__r8 = 8*4
__r9 = 9*4
__r10 = 10*4
__r11 = 11*4
__r12 = 12*4
__r13 = 13*4
__r14 = 14*4
__r15 = 15*4
__r16 = 16*4
__r17 = 17*4
__r18 = 18*4
__r19 = 19*4
__r20 = 20*4
__r21 = 21*4
__r22 = 22*4
__r23 = 23*4
__r24 = 24*4
__r25 = 25*4
__r26 = 26*4
__r27 = 27*4
__r28 = 28*4
__r29 = 29*4
__r30 = 30*4
__r31 = 31*4
__f0 = 0*8
__f1 = 1*8
__f2 = 2*8
__f3 = 3*8
__f4 = 4*8
__f5 = 5*8
__f6 = 6*8
__f7 = 7*8
__f8 = 8*8
__f9 = 9*8
__f10 = 10*8
__f11 = 11*8
__f12 = 12*8
__f13 = 13*8
__f14 = 14*8
__f15 = 15*8
__f16 = 16*8
__f17 = 17*8
__f18 = 18*8
__f19 = 19*8
__f20 = 20*8
__f21 = 21*8
__f22 = 22*8
__f23 = 23*8
__f24 = 24*8
__f25 = 25*8
__f26 = 26*8
__f27 = 27*8
__f28 = 28*8
__f29 = 29*8
__f30 = 30*8
__f31 = 31*8
**** Small exception context structure (if EXCATTR_SMALLCONTEXT was set)
STRUCTURE XCONTEXT,0
ULONG XCO_EXCID ;exception ID (see above)
ULONG XCO_R3 ;r3
LABEL XCO_SIZE ;don't depend on this size
**** Possible return values for exception handlers
EXCRETURN_NORMAL = 0 ;allow the next exc handlers to complete
EXCRETURN_ABORT = 1 ;exception is immediately leaved, all
;other exception handlers are ignored
ENDC ;POWERPCLIB_V7
**** PPCINFO_CPU (returned by GetCPU and GetInfo)
BITDEF CPU,603,4
BITDEF CPU,603E,8
BITDEF CPU,604,12
BITDEF CPU,604E,16
BITDEF CPU,620,20
**** PowerPC Structure transferred to RunPPC, WaitforPPC,
**** Run68K and WaitFor68K
STRUCTURE PP,0
APTR PP_CODE ;Ptr to PPC code
ULONG PP_OFFSET ;Offset to PP_CODE
ULONG PP_FLAGS ;flags (see below)
APTR PP_STACKPTR ;stack pointer
ULONG PP_STACKSIZE ;stack size
STRUCT PP_REGS,15*4 ;15 registers (d0-a6)
STRUCT PP_FREGS,8*8 ;8 registers (fp0-fp7)
LABEL PP_SIZE
**** PP_FLAGS
BITDEF PP,ASYNC,0 ;call PPC/68K in asynchrone mode
**** status returned by RunPPC, WaitForPPC, Run68K and WaitFor68K
PPERR_SUCCESS = 0 ;success
PPERR_ASYNCERR = 1 ;synchron call after asynchron call
PPERR_WAITERR = 2 ;WaitFor[PPC/68K] after synchron call
**** 68K-Assembler macro to open the powerpc.library
*
* Usage: OPENPOWERPC [Version]
*
* note: The macro POWERDATA (see below) must be defined
* The base of the exec.library must be defined under the name
* _SysBase
OPENPOWERPC macro
movem.l d0/d1/a0/a1/a6,-(sp)
IFC "","\1"
moveq #0,d0
ELSEIF
move.l #\1,d0
ENDC
lea powerpcname,a1
move.l _SysBase,a6
jsr -552(a6)
move.l d0,_PowerPCBase
movem.l (sp)+,d0/d1/a0/a1/a6
endm
**** 68K-Assembler macro to close the powerpc.library
*
* Usage: CLOSEPOWERPC
*
* note: The macro POWERDATA (see below) must be defined
* The base of the exec.library must be defined under the name
* _SysBase
CLOSEPOWERPC macro
movem.l d0/d1/a0/a1/a6,-(sp)
move.l _SysBase,a6
move.l _PowerPCBase,d0
beq.b .noclose\@
move.l d0,a1
jsr -414(a6)
.noclose\@
movem.l (sp)+,d0/d1/a0/a1/a6
endm
**** 68K-Assembler macro to run a PPC function
*
* Usage: RUNPOWERPC_XL Function,[Offset,[Flags,[StackSize,[FPU]]]]
*
* note: a4 MUST point to the small data section (resp.
* must have the value _LinkerDB)
RUNPOWERPC_XL macro
lea -(PP_SIZE-PP_REGS-15*4)(sp),sp
movem.l d0-a6,-(sp)
lea -PP_REGS(sp),a0
move.l a0,sp
IFC "FPU","\5"
lea PP_FREGS(a0),a1
fmove.d fp0,(a1)+
fmove.d fp1,(a1)+
fmove.d fp2,(a1)+
fmove.d fp3,(a1)+
fmove.d fp4,(a1)+
fmove.d fp5,(a1)+
fmove.d fp6,(a1)+
fmove.d fp7,(a1)+
ENDC
IFNC "","\2"
move.l \1,a1
move.l _LVO\2+2(a1),PP_CODE(a0)
move.l a1,PP_REGS+0*4(a0)
ELSEIF
XREF @_\1
move.l @_\1,a1
; lea \1,a1
move.l a1,PP_CODE(a0)
ENDC
clr.l PP_OFFSET(a0)
IFC "","\3"
clr.l PP_FLAGS(a0)
ELSEIF
move.l #\3,PP_FLAGS(a0)
ENDC
IFC "","\4"
clr.l PP_STACKPTR(a0)
clr.l PP_STACKSIZE(a0)
ELSEIF
move.l sp,PP_STACKPTR(a0)
add.l #PP_SIZE,PP_STACKPTR(a0)
move.l #\4,PP_STACKSIZE(a0)
ENDC
move.l _PowerPCBase,a6
jsr -30(a6) ;RunPPC
IFC "FPU","\5"
lea PP_FREGS(sp),a0
fmove.d (a0)+,fp0
fmove.d (a0)+,fp1
fmove.d (a0)+,fp2
fmove.d (a0)+,fp3
fmove.d (a0)+,fp4
fmove.d (a0)+,fp5
fmove.d (a0)+,fp6
fmove.d (a0)+,fp7
ENDC
lea PP_REGS(sp),sp
movem.l (sp),d0-a6
lea (PP_SIZE-PP_REGS)(sp),sp
endm
**** 68K-Assembler macro to run a PPC function (quick version)
*
* Usage: RUNPOWERPC Function,[Offset[Flags,[,FPU]]]
*
* note: a4 MUST point to the small data section (resp.
* must have the value _LinkerDB)
*
* this macro does only transfer d0/d1/a0/a1 (and fp0/fp1 with
* FPU-Option). No stack is transferred. The only return parameter
* is d0 (fp0/fp1 with FPU-Option). d1/a0/a1 are trashed.
RUNPOWERPC macro
lea -PP_SIZE(sp),sp
move.l d0,PP_REGS(sp)
move.l d1,PP_REGS+1*4(sp)
move.l a0,PP_REGS+8*4(sp)
move.l a1,PP_REGS+9*4(sp)
move.l a4,PP_REGS+12*4(sp)
move.l sp,a0
IFC "FPU","\5"
fmove.d fp0,PP_FREGS(a0)
fmove.d fp1,PP_FREGS+1*8(a0)
ENDC
IFNC "","\2"
move.l \1,a1
move.l _LVO\2+2(a1),PP_CODE(a0)
move.l a1,PP_REGS+0*4(a0)
ELSEIF
XREF @_\1
move.l @_\1,a1
; lea \1,a1
move.l a1,PP_CODE(a0)
ENDC
clr.l PP_OFFSET(a0)
IFC "","\3"
clr.l PP_FLAGS(a0)
ELSEIF
move.l #\3,PP_FLAGS(a0)
ENDC
clr.l PP_STACKPTR(a0)
clr.l PP_STACKSIZE(a0)
move.l _PowerPCBase,a6
jsr -30(a6) ;RunPPC
IFC "FPU","\5"
fmove.d PP_FREGS(sp),fp0
fmove.d PP_FREGS+1*8(sp),fp1
ENDC
move.l PP_REGS(sp),d0
lea PP_SIZE(sp),sp
endm
**** 68K-Assembler macro to wait for an asynchron PPC process
*
* Usage: WAITFORPPC_XL [FPU]
*
WAITFORPPC_XL macro
lea -PP_SIZE(sp),sp
move.l sp,a0
move.l _PowerPCBase,a6
jsr -36(a6) ;WaitForPPC
cmp.l #PPERR_SUCCESS,d0
beq.b .success\@
lea PP_SIZE(sp),sp
bra.b .exit\@
.success\@
IFC "FPU","\1"
lea PP_FREGS(sp),a0
fmove.d (a0)+,fp0
fmove.d (a0)+,fp1
fmove.d (a0)+,fp2
fmove.d (a0)+,fp3
fmove.d (a0)+,fp4
fmove.d (a0)+,fp5
fmove.d (a0)+,fp6
fmove.d (a0)+,fp7
ENDC
lea PP_REGS(sp),sp
movem.l (sp),d0-a6
lea (PP_SIZE-PP_REGS)(sp),sp
.exit\@
endm
**** 68K-Assembler macro to wait for an asynchron PPC process
* (quick version)
*
* Usage: WAITFORPPC [FPU]
*
* The only return parameter is d0 (fp0/fp1 with FPU-Option).
* d1/a0/a1 are trashed.
WAITFORPPC macro
lea -PP_SIZE(sp),sp
move.l sp,a0
move.l _PowerPCBase,a6
jsr -36(a6) ;WaitForPPC
cmp.l #PPERR_SUCCESS,d0
bne.b .exit\@
IFC "FPU","\1"
fmove.d PP_FREGS(sp),fp0
fmove.d PP_FREGS+1*8(sp),fp1
ENDC
move.l PP_REGS(sp),d0
.exit\@
lea PP_SIZE(sp),sp
endm
**** 68K-Assembler macro to define some variables required by
* some other macros (see above)
*
* Usage: POWERDATA
POWERDATA macro
_PowerPCBase dc.l 0
powerpcname dc.b "powerpc.library",0
cnop 0,4
endm
**** PPC-Assembler macro to run a 68K function
*
* Usage: RUN68K_XL Function,[Offset,[Flags,[StackSize,[FPU]]]]
*
* note: the local stackpointer must be properly initialized
* this macro needs currently 148 bytes of local stack space
* The base of the powerpc.library must be defined under the name
* _PowerPCBase
*
* r7-r10 are trashed
RUN68K_XL MACRO
push _a6
subi local,local,PP_SIZE
stw _d0,PP_REGS(local)
stw _d1,PP_REGS+1*4(local)
stw _d2,PP_REGS+2*4(local)
stw _d3,PP_REGS+3*4(local)
stw _d4,PP_REGS+4*4(local)
stw _d5,PP_REGS+5*4(local)
stw _d6,PP_REGS+6*4(local)
stw _d7,PP_REGS+7*4(local)
stw _a0,PP_REGS+8*4(local)
stw _a1,PP_REGS+9*4(local)
stw _a2,PP_REGS+10*4(local)
stw _a3,PP_REGS+11*4(local)
stw _a4,PP_REGS+12*4(local)
stw _a5,PP_REGS+13*4(local)
IFC "FPU","\5"
stfd _fp0,PP_FREGS(local)
stfd _fp1,PP_FREGS+1*8(local)
stfd _fp2,PP_FREGS+2*8(local)
stfd _fp3,PP_FREGS+3*8(local)
stfd _fp4,PP_FREGS+4*8(local)
stfd _fp5,PP_FREGS+5*8(local)
stfd _fp6,PP_FREGS+6*8(local)
stfd _fp7,PP_FREGS+7*8(local)
ENDC
IFNC "","\2"
lw _d0,\1
stw _d0,PP_CODE(local)
stw _d0,PP_REGS+14*4(local)
li _d0,_LVO\2
ELSEIF
stw _a6,PP_REGS+14*4(local)
lw _d0,.routine\@
stw _d0,PP_CODE(local)
li _d0,0
ENDC
stw _d0,PP_OFFSET(local)
IFC "","\3"
li _d0,0
ELSEIF
liw _d0,\3
ENDC
stw _d0,PP_FLAGS(local)
IFC "","\4"
li _d0,0
stw _d0,PP_STACKPTR(local)
ELSEIF
stw stack,PP_STACKPTR(local)
liw _d0,\4
ENDC
stw _d0,PP_STACKSIZE(local)
mr r4,local
lw r3,_PowerPCBase
lwz r0,-300+2(r3) ;Run68K
mtlr r0
blrl
IFC "FPU","\5"
lfd _fp0,PP_FREGS(local)
lfd _fp1,PP_FREGS+1*8(local)
lfd _fp2,PP_FREGS+2*8(local)
lfd _fp3,PP_FREGS+3*8(local)
lfd _fp4,PP_FREGS+4*8(local)
lfd _fp5,PP_FREGS+5*8(local)
lfd _fp6,PP_FREGS+6*8(local)
lfd _fp7,PP_FREGS+7*8(local)
ENDC
lwz _d0,PP_REGS(local)
lwz _d1,PP_REGS+1*4(local)
lwz _d2,PP_REGS+2*4(local)
lwz _d3,PP_REGS+3*4(local)
lwz _d4,PP_REGS+4*4(local)
lwz _d5,PP_REGS+5*4(local)
lwz _d6,PP_REGS+6*4(local)
lwz _d7,PP_REGS+7*4(local)
lwz _a0,PP_REGS+8*4(local)
lwz _a1,PP_REGS+9*4(local)
lwz _a2,PP_REGS+10*4(local)
lwz _a3,PP_REGS+11*4(local)
lwz _a4,PP_REGS+12*4(local)
lwz _a5,PP_REGS+13*4(local)
lwz _a6,PP_REGS+14*4(local)
addi local,local,PP_SIZE
pop _a6
IFC "","\2"
save
section "Run68K",data
.routine\@ dc.l \1
restore
ENDC
ENDM
**** PPC-Assembler macro to run a 68K function (quick version)
*
* Usage: RUN68K Function,[Offset,[Flags,[,FPU]]]
*
* note: the local stackpointer must be properly initialized
* this macro needs currently 148 bytes of local stack space
* The base of the powerpc.library must be defined under the name
* _PowerPCBase
*
* this macro does only transfer _d0/_d1/_a0/_a1 (and _fp0/_fp1 with
* FPU-Option). No stack is transferred. The only return parameter
* is _d0 (_fp0/_fp1 with FPU-Option). r4-r10 are trashed.
RUN68K MACRO
push _a6
subi local,local,PP_SIZE
stw _d0,PP_REGS(local)
stw _d1,PP_REGS+1*4(local)
stw _a0,PP_REGS+8*4(local)
stw _a1,PP_REGS+9*4(local)
stw _a4,PP_REGS+12*4(local)
IFC "FPU","\5"
stfd _fp0,PP_FREGS(local)
stfd _fp1,PP_FREGS+1*8(local)
ENDC
IFNC "","\2"
lw _d0,\1
stw _d0,PP_CODE(local)
stw _d0,PP_REGS+14*4(local)
li _d0,_LVO\2
ELSEIF
lw _d0,.routine\@
stw _d0,PP_CODE(local)
li _d0,0
ENDC
stw _d0,PP_OFFSET(local)
IFC "","\3"
li _d0,0
ELSEIF
liw _d0,\3
ENDC
stw _d0,PP_FLAGS(local)
li _d0,0
stw _d0,PP_STACKPTR(local)
stw _d0,PP_STACKSIZE(local)
mr r4,local
lw r3,_PowerPCBase
lwz r0,-300+2(r3) ;Run68K
mtlr r0
blrl
IFC "FPU","\5"
lfd _fp0,PP_FREGS(local)
lfd _fp1,PP_FREGS+1*8(local)
ENDC
lwz _d0,PP_REGS(local)
addi local,local,PP_SIZE
pop _a6
IFC "","\2"
save
section "Run68K",data
.routine\@ dc.l \1
restore
ENDC
ENDM
**** PPC-Assembler macro to wait for an asynchron 68K process
*
* Usage: WAITFOR68K_XL [FPU]
*
* r7-r10 are trashed
* Important: If an AMIGA-OS library function was called using
* RUN68K or RUN68K_XL then r31 contains the library base!
WAITFOR68K_XL macro
subi local,local,PP_SIZE
mr r4,local
lw r3,_PowerPCBase
lwz r0,-306+2(r3) ;WaitFor68K
mtlr r0
blrl
liw r0,PPERR_SUCCESS
cmpw r3,r0
bne .exit\@
IFC "FPU","\1"
lfd _fp0,PP_FREGS(local)
lfd _fp1,PP_FREGS+1*8(local)
lfd _fp2,PP_FREGS+2*8(local)
lfd _fp3,PP_FREGS+3*8(local)
lfd _fp4,PP_FREGS+4*8(local)
lfd _fp5,PP_FREGS+5*8(local)
lfd _fp6,PP_FREGS+6*8(local)
lfd _fp7,PP_FREGS+7*8(local)
ENDC
lwz _d0,PP_REGS(local)
lwz _d1,PP_REGS+1*4(local)
lwz _d2,PP_REGS+2*4(local)
lwz _d3,PP_REGS+3*4(local)
lwz _d4,PP_REGS+4*4(local)
lwz _d5,PP_REGS+5*4(local)
lwz _d6,PP_REGS+6*4(local)
lwz _d7,PP_REGS+7*4(local)
lwz _a0,PP_REGS+8*4(local)
lwz _a1,PP_REGS+9*4(local)
lwz _a2,PP_REGS+10*4(local)
lwz _a3,PP_REGS+11*4(local)
lwz _a4,PP_REGS+12*4(local)
lwz _a5,PP_REGS+13*4(local)
lwz _a6,PP_REGS+14*4(local)
.exit\@
addi local,local,PP_SIZE
endm
**** PPC-Assembler macro to wait for an asynchron 68K process
* (quick version)
*
* Usage: WAITFOR68K [FPU]
*
* The only return parameter is _d0 (_fp0/_fp1 with FPU-Option).
* r4-r10 are trashed.
WAITFOR68K macro
subi local,local,PP_SIZE
mr r4,local
lw r3,_PowerPCBase
lwz r0,-306+2(r3) ;WaitFor68K
mtlr r0
blrl
liw r0,PPERR_SUCCESS
cmpw r3,r0
bne .exit\@
IFC "FPU","\1"
lfd _fp0,PP_FREGS(local)
lfd _fp1,PP_FREGS+1*8(local)
ENDC
lwz _d0,PP_REGS(local)
.exit\@
addi local,local,PP_SIZE
endm
ENDC ;POWERPC_I